//
//  WBBaseViewController.swift
//  微博Demo
//
//  Created by 花化华 on 2016/11/22.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import MJRefresh

class WBBaseViewController: WBNavigationViewController {
    
    /// visitorView
    var visitorView: WBVisitorView?
    /// 访客视图信息字典
    var visitorInfoDictionary: [String: String]?
    
    /// 表格视图 - 如果用户没有登录，就不创建
    var tableView: UITableView?
    
    //刷新控件
    lazy var refreshHeader: MJRefreshNormalHeader = MJRefreshNormalHeader(refreshingTarget: self, refreshingAction: #selector(loadData))
    lazy var refreshFooter: MJRefreshAutoNormalFooter = MJRefreshAutoNormalFooter(refreshingTarget: self, refreshingAction: #selector(loadData))

    override func viewDidLoad() {
        super.viewDidLoad()
        
        setupUI()
        loadData()
    }
    
    deinit {
        NotificationCenter.default.removeObserver(self)
    }

    /// 加载数据 - 具体的实现由子类负责
    func loadData() {
        // 默认刷新完就关闭
        refreshHeader.endRefreshing()
        refreshFooter.endRefreshing()
        
        print("刷新...")
    }
    
}

// MARK: - 监听方法
extension WBBaseViewController {
    
    @objc fileprivate func login() {
        //推出登录页面
        let oAuthViewController = WBOAuthViewController()
        oAuthViewController.title = "登录"
        let nav = WBNavigationController(rootViewController: oAuthViewController)
        present(nav, animated: true, completion: nil)
    }
    
    @objc fileprivate func register() {
        print("注册...")
    }
    
    @objc fileprivate func loginSuccess () {
        print("登录成功")
        
        visitorView?.removeFromSuperview()
        visitorView = nil //arc中释放对象的正确方式
        
        setupTableView()

        loadData()
        
    }
    
    @objc fileprivate func logoutSuccess () {
        print("注销成功")
        
        tableView?.removeFromSuperview()
        tableView = nil
        
        setupVisitorView()
    }
    
}

// MARK: - 设置界面
extension WBBaseViewController {
    
    fileprivate func setupUI() {
        
        //是否添加访客视图
        if !WBUserAccount.shared.isLogin {
            setupVisitorView()
        }else {
            setupTableView()
        }
        
        //登录成功通知
        NotificationCenter.default.addObserver(self, selector: #selector(loginSuccess), name: NSNotification.Name(rawValue: loginSuccessNotification), object: nil)
        
        //注销成功通知
        NotificationCenter.default.addObserver(self, selector: #selector(logoutSuccess), name: NSNotification.Name(rawValue: logoutSuccessNotification), object: nil)
    }
    
    /// 设置表格视图 - 用户登录之后执行
    /// 子类重写此方法，因为子类不需要关心用户登录之前的逻辑
    func setupTableView() {
        tableView = UITableView(frame: view.bounds,style: .plain)
        
        view.insertSubview(tableView!, belowSubview: navigationBar)
        // 设置数据源&代理 -> 目的：子类直接实现数据源方法
        tableView?.delegate = self
        tableView?.dataSource = self
        
        //去除tableView的分割线
        tableView?.separatorStyle = .none
        
        // 设置内容缩进
        tableView?.contentInset = UIEdgeInsets(top: navigationBar.bounds.height, left: 0, bottom: tabBarController?.tabBar.bounds.height ?? 49, right: 0)
        
        // 设置刷新控件
        tableView?.mj_header = refreshHeader
        tableView?.mj_footer = refreshFooter
        
    }
    
    /// 设置访客视图
    func setupVisitorView() {
        
        if visitorView == nil {
            visitorView = WBVisitorView(frame: view.bounds)
            view.insertSubview(visitorView!, belowSubview: navigationBar)
            
            // 1. 设置访客视图信息
            visitorView?.visitorInfo = visitorInfoDictionary
            
            // 2. 添加访客视图按钮的监听方法
            visitorView?.loginButton.addTarget(self, action: #selector(login), for: .touchUpInside)
            visitorView?.registerButton.addTarget(self, action: #selector(register), for: .touchUpInside)
        }
        
    }
    
}

// MARK: - UITableViewDataSource, UITableViewDelegate
extension WBBaseViewController : UITableViewDelegate, UITableViewDataSource {
    
    // UITableViewDataSource
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 14
    }
    
    // 基类只是准备方法，子类负责具体的实现
    // 子类的数据源方法不需要 super
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        return UITableViewCell()
    }
    
    
    // UITableViewDelegate
    /// 在显示最后一行的时候，做上拉刷新
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        
    }
    
}
